import requests
from bs4 import BeautifulSoup
import plotly.graph_objects as go
import plotly.express as px
import pandas as pd

#获取数据
#获取界面源码
url='https://blog.csdn.net/m0_63533811?type=blog'
r=requests.get(url,
               headers={"user-agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36"
                        "(KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"}
            )#请求网站api,得到网页界面源代码
if r.status_code!=200:#若请求失败，则抛出异常
    raise Exception()

#解析数据
#解析获取源码，得到总源码块
soup=BeautifulSoup(r.text,'html.parser')#利用‘html.parser'解析器解析源码
general_nodes=soup.find_all('div',class_='list-box-cont')#查找与文章内容相关的源码块

#依次得到文章名,阅读量
name_nodes=[]
view_nodes=[]
for general_node in general_nodes:
    #得到文章名源码块
    general_name_node=general_node.find('div',class_='blog-list-box-top').find('h4')
    name_node=general_name_node.get_text()#直接获取文章名
    name_nodes.append(name_node)#添加文章名

    #得到阅读量源码块
    general_view_node=general_node.find('span',class_='view-num')
    view_node=general_view_node.get_text()#获取响应的阅读量源码
    view_nodes.append(view_node[0])#添加阅读量

#数据可视化
#创建折线图
fig=go.Figure()#创建一个图表
fig.add_trace(go.Scatter(
    x=name_nodes,
    y=view_nodes,
))#在图表中添加折线图

#增加折线图样式
fig.update_layout(
    title='用户近期博客阅读量',
    xaxis=dict(title='文章名'),
    yaxis=dict(title='阅读量'),
)#设置标题

#展示最终效果图
fig.show()